package com.leoman.service;

import com.leoman.entity.CompanyUser;
import com.leoman.entity.vo.CompanyUserAuthVo;
import com.leoman.entity.vo.StatUserData;
import com.leoman.exception.*;
import com.leoman.service.common.ICommonService;
import org.springframework.data.domain.Page;
import org.springframework.web.multipart.MultipartRequest;

/**
 * CompanyUserService
 * Created by 涂奕恒 on 2016/10/18 0018 下午 3:11.
 */
public interface CompanyUserService extends ICommonService<CompanyUser> {

    // 查询用户详情
    CompanyUser iFindOneByInfo(Integer companyUserId) throws ParamErrorException, UserNotFindException, UserSealStatusException;

    // 根据企业用户ID查询该用户的认证信息
    CompanyUserAuthVo iFindInfoByCompanyUserId(Integer companyUserId) throws ParamErrorException, UserNotFindException, UserSealStatusException, NoDataException;

    // 根据企业用户ID提交该用户的认证信息
    void iSaveCompanyAuthInfo(Integer companyUserId, CompanyUserAuthVo companyUserAuthVo, MultipartRequest multipartRequest) throws ParamErrorException, UserNotFindException, UserSealStatusException, AuthDataExistException;


    // *
    // *
    // *
    // * 上面的是移动端接口
    // *
    // * 我是分割线
    // *
    // * 下面的是后台的方法
    // *
    // *
    // *


    // 查询新增企业用户数
    Integer findCountWithNewCompanyUser(Integer index);

    // 查询新增申请认证企业用户数
    Integer findCountWithNewCompanyUserNoCheck(Integer index);

    // 查询企业用户列表（分页）
    Page<CompanyUser> pageByParams(String mobile,
                                   String nickName,
                                   Integer type,
                                   Integer status,
                                   Integer sortType,
                                   Integer isCheck,
                                   Integer checkStatus,
                                   Integer pageNum,
                                   Integer pageSize);

    // 批量修改企业用户状态
    Integer changeCompanyUserStatus(Integer[] companyUserIds, Integer status);

    // 批量审核企业用户
    Integer changeCompanyUserCheckStatus(Integer[] companyUserIds, Integer status, String failReasonContent);

    // 根据手机号获取企业用户信息
    CompanyUser getInfoByMobile(String mobile);

    // 根据企业用户id查询对应的企业用户统计数据
    StatUserData getStatInfoByCompanyUserId(Integer companyUserId);

    // 保存个人广告主认证信息
    Integer savePersonalAuthInfo(CompanyUser companyUser,
                                 String userName,
                                 Integer paperType,
                                 String paperNum,
                                 String mobile,
                                 String email,
                                 String address,
                                 MultipartRequest multipartRequest);

    // 保存企业广告主认证信息
    Integer saveCompanyAuthInfo(CompanyUser companyUser,
                                String companyName,
                                String licenseNum,
                                String userName,
                                String mobile,
                                MultipartRequest multipartRequest);

    // 统计企业用户今日支出金额
    Double statTodayMoney(CompanyUser companyUser);

    // 广告主账户余额编辑
    Integer changeCompanyUserMoney(Integer companyUserId, Double money);
}